import axios from 'axios';
import apiConfig from '../config/api';

// API 配置 - 使用统一的配置
const API_BASE_URL = apiConfig.apiUrl.replace('/chat/completions', '');

/**
 * 调用 AI 聊天接口
 * @param {string} mergedImageBase64 - 拼接后的图片 base64
 * @param {string} systemPrompt - 系统提示词
 * @param {string} userMessage - 用户消息
 * @param {Object} options - 其他参数（包括 apiUrl）
 * @returns {Promise<string>} AI 响应
 */
export async function callAIChat(mergedImageBase64, systemPrompt, userMessage, options = {}) {
  try {
    // 构建用户消息内容
    const userContent = [
      {
        type: "text",
        text: userMessage || "请分析这些图片"
      }
    ];

    // 只有在有图片时才添加image_url字段
    if (mergedImageBase64) {
      userContent.push({
        type: "image_url",
        image_url: {
          url: mergedImageBase64
        }
      });
    }

    // 构建请求体
    const requestBody = {
      model: options.model || "zrt-multimodal-llm-8b",
      messages: [
        {
          role: "system",
          content: systemPrompt || "你是一个专业的AI助手。你只能用中文回复"
        },
        {
          role: "user",
          content: userContent
        }
      ],
      temperature: options.temperature || 0.7,
      top_p: options.top_p || 0.95,
      n: options.n || 1,
      stream: options.stream || false,
      max_tokens: options.max_tokens || 1024,
      presence_penalty: options.presence_penalty || 0,
      frequency_penalty: options.frequency_penalty || 0
    };

    // 使用传入的 apiUrl 或默认值
    const apiUrl = options.apiUrl || `${API_BASE_URL}/chat/completions`;

    // 发送请求
    const response = await axios.post(apiUrl, requestBody, {
      headers: {
        'Content-Type': 'application/json'
      },
      timeout: 60000 // 60秒超时
    });

    // 返回 AI 响应内容
    if (response.data && response.data.choices && response.data.choices.length > 0) {
      return response.data.choices[0].message.content;
    }
    
    throw new Error('AI 响应格式错误');
  } catch (error) {
    console.error('AI 调用失败:', error);
    
    if (error.response) {
      // 服务器返回了错误响应
      throw new Error(`服务器错误: ${error.response.status} - ${error.response.data?.message || error.message}`);
    } else if (error.request) {
      // 请求发送了但没有收到响应
      throw new Error('网络错误: 无法连接到服务器');
    } else {
      // 其他错误
      throw new Error(`请求错误: ${error.message}`);
    }
  }
}